﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;

namespace Tst.Models
{
    public class ProjetoRepository
    {

        private TstEntities context;


        public ProjetoRepository()
        {
            this.context = new TstEntities();     
        }


        ~ProjetoRepository()
        {
            this.context.Dispose();
        }

        public void Save()         
        {
            this.context.SaveChanges();
        }

        public IList<Projeto> GetAll()
        {
            return this.context.Projeto.ToList();            
        }

        public Projeto GetById(int cd_projeto)
        {
            return context.Projeto.FirstOrDefault(p => p.cd_projeto == cd_projeto);
        }

        public Projeto GetByDescricao(string ds_descricao)
        {
            return context.Projeto.FirstOrDefault(p => p.ds_descricao.Equals(ds_descricao));
        }


        public Projeto Insert(Projeto projeto)
        {
            //responsavel no contexto de projetoRepository
            Usuario responsavel = this.context.Usuario.First(u => u.cd_usuario == projeto.Responsavel.cd_usuario);

            //atribui referencia
            projeto.ResponsavelReference.Value = responsavel;
            projeto.Responsavel = responsavel;

            //adiciona
            this.context.AddToProjeto(projeto);

            return projeto;
        }

        public void Update(Projeto projeto)
        {
            //responsavel no contexto de projetoRepository
            Usuario responsavel = this.context.Usuario.First(u => u.cd_usuario == projeto.Responsavel.cd_usuario);

            //atribui referencia
            projeto.ResponsavelReference.Value = responsavel;
            projeto.Responsavel = responsavel;

            this.context.AttachUpdated(projeto);
        }


        public void Delete(int cd_projeto)
        {
            Projeto projeto = this.GetById(cd_projeto);

            if (projeto != null)
            {
                projeto.ResponsavelReference.Load();
                projeto.Responsavel = null;

                this.context.DeleteObject(projeto);
            }            
        }





    }
}
